package 中等.模拟;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * 在一个 8x8 的棋盘上，放置着若干「黑皇后」和一个「白国王」。
 * 给定一个由整数坐标组成的数组 queens ，表示黑皇后的位置；
 * 以及一对坐标 king ，表示白国王的位置，返回所有可以攻击国
 * 王的皇后的坐标(任意顺序)。
 */
public class 可以攻击国王的皇后_1222 {

    public static void main(String[] args) {

    }

    private int[][] direction = {{-1, 0}, {-1, -1}, {-1, 1}, {0, -1}, {0, 1}, {1, 0}, {1, 1}, {1, -1}};

    /**
     * 模拟
     * 国王周围 8 个方向扩散分别找到的第一个皇后可以攻击
     */
    public List<List<Integer>> queensAttacktheKing(int[][] queens, int[] king) {
        List<List<Integer>> lists = new ArrayList<>();
        boolean[][] grid = new boolean[8][8];
        for (int[] queen : queens) {
            grid[queen[0]][queen[1]] = true;
        }

        for (int[] direct : direction) {
            int x = king[0] + direct[0], y = king[1] + direct[1];
            while (x >= 0 && x < 8 && y >= 0 && y < 8) {
                if (grid[x][y]) {
                    lists.add(Arrays.asList(x, y));
                    break;
                }

                x += direct[0];
                y += direct[1];
            }
        }

        return lists;
    }

}
